<?php
class Ali_mobilepaym extends My_Model
{

    public function __construct()
    {
        parent::__construct();
        $this->load->helper('alipay_utils');
    }

    // create the order info. 创建订单信息
    public function genQuotePayInfo($order_id, $subject, $body, $price, $expire_min=PAY_ALI_EXPIRE, $notify_url = PAY_ALI_NOTIFY) {
        if ($expire_min<=0) {
            $expire_min = 1;
        }
        $paras = array(
            "partner" => PAY_ALI_PARTNER,           // 签约合作者身份ID
            "seller_id" => PAY_ALI_SELLER,          // 签约卖家支付宝账号
            "out_trade_no" => $order_id,            // 商户网站唯一订单号
            "subject" => $subject,                  // 商品名称
            "body" => $body,                        // 商品详情
            "total_fee" => $price,                  // 商品金额, 单位:元
            "notify_url" => urlencode($notify_url), // 服务器异步通知页面路径
            "service" => "mobile.securitypay.pay",  // 服务接口名称， 固定值
            "payment_type" => "1",                  // 支付类型， 固定值
            "_input_charset" => "utf-8",            // 参数编码， 固定值
            "it_b_pay" => $expire_min."m",          // 设置未付款交易的超时时间,取值范围：1m～15d。m-分钟，h-小时，d-天，1c-当天（无论交易何时创建，都在0点关闭）
        );

        $pre_str = getQuoteSignContent($paras);
//        echo $pre_str;exit();
        $my_sign = rsaSign($pre_str, PAY_ALI_QY_PRIVATE_KEY, true);

        $result = "{$pre_str}&sign=\"{$my_sign}\"&sign_type=\"RSA\"";
        return $result;
    }

    /**
     * 支付宝服务器异步通知支付状态
     * @param $out_trade_no string dingdan_id
     * @param $trade_no string 支付宝流水号
     * @param $trade_status string TRADE_FINISHED|TRADE_SUCCESS
     */
    public function asyncNotify($out_trade_no, $trade_no, $trade_status) {
        $this->load->model('dingdanm');

        $origin_dingdan = $this->dingdanm->getDBByDDId($out_trade_no);
        if ($origin_dingdan["status"] == DDConst::STATUS_PREPAY) {
            $this->dingdanm->updateDingdanStatus(
                $origin_dingdan, DDConst::STATUS_PAY_ASYNC_SUCCESS,
                array('transaction_id'=>$trade_no)
            );
        }
    }


    /**
     * 支付宝服务器异步通知支付状态
     * @param $out_trade_no string dingdan_id
     * @param $trade_no string 支付宝流水号
     * @param $trade_status string TRADE_FINISHED|TRADE_SUCCESS
     */
    public function asyncNotifyChahua($out_trade_no, $trade_no, $trade_status) {
        $this->load->model('chahuam');

        $origin_dingdan = $this->chahuam->getDBByDDId($out_trade_no);
        if ($origin_dingdan["status"] == CHConst::STATUS_PREPAY) {
            $this->chahuam->updateDingdanStatus(
                $origin_dingdan, CHConst::STATUS_PAY_ASYNC_SUCCESS,
                array('transaction_id'=>$trade_no)
            );
        }
    }


    /**
     * 支付宝服务器异步通知支付状态
     * @param $out_trade_no string dingdan_id
     * @param $trade_no string 支付宝流水号
     * @param $trade_status string TRADE_FINISHED|TRADE_SUCCESS
     */
    public function thirdNotifyTrade($out_trade_no, $trade_no, $trade_status) {
        ci_load_once('tradem');

        $broker = Tradem::buildTradeBroker(PAY_ALI_APPID_MOBILE, Tradem::BROKER_TYPE_THIRD_ALIPAY, '');
        $trade = $this->tradem->getTradeByTradeID($out_trade_no, '');
        $upt_data = array('notifytime' => time(), 'third_trade_id' => $trade_no);
        $this->tradem->executeTrade($broker, $trade, Tradem::TRADE_STATUS_SUCCESS, $upt_data);
    }
}
